﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ShowDXF
{
    public class ZoomDXF
    {
        /// <summary>
        /// Dxf图形适合窗体显示的缩放系数
        /// </summary>
        public float ZoomFactor; //DXF图形缩放因子
        /// <summary>
        /// Dxf图形X轴移动到窗体中心的距离
        /// </summary>
        public float MoveCenterX; //因平移图形后，使得图形的左下角和窗体的左下角在同一点上，但图形按比例缩放后，图形不在窗体X轴的中心，故设置此变量，用于计算图形距离窗体X轴方向上中心的距离
        /// <summary>
        /// Dxf图形Y轴移动到窗体中心的距离
        /// </summary>
        public float MoveCenterY; //因平移图形后，使得图形的左下角和窗体的左下角在同一点上，但图形按比例缩放后，图形不在窗体Y轴的中心，故设置此变量，用于计算图形距离窗体Y轴方向上中心的距离

        public float DxfWidth = Math.Abs(LoadLine.LineExPoint_X.Max() - LoadLine.LineExPoint_X.Min()); //DXF文件在X轴上的长度
        public float DxfHeight = Math.Abs(LoadLine.LineExPoint_Y.Max() - LoadLine.LineExPoint_Y.Min()); //DXF文件在Y轴上的高度

        /// <summary>
        /// 获得Dxf图形X轴及Y轴移动到窗体中心的距离；获得Dxf图形适合窗体显示的缩放系数
        /// </summary>
        /// <param name="Picture"></param>
        public void Zoom(PictureBox Picture)
        {

            if (Picture.Width / DxfWidth > Picture.Height / DxfHeight) //比较 长度比【窗体长度/DXF长度】和高度比【窗体宽度/DXF宽度】的比值
            {
                ZoomFactor = ((Picture.Height) / DxfHeight) * 0.95f; //计算窗体高度和图中的图形的高度的比值,MoveCenterX，0.95f为保险系数

                //因平移图形后，使得图形的左下角和窗体的左下角在同一点上，但图形按比例缩放后，图形不在窗体X轴的中心，故设置此变量，用于计算图形距离窗体X轴方向上中心的距离
                //因平移图形后，使得图形的左下角和窗体的左下角在同一点上，但图形按比例缩放后，图形不在窗体Y轴的中心，故设置此变量，用于计算图形距离窗体Y轴方向上中心的距离
                MoveCenterX = Math.Abs(DxfWidth * ZoomFactor - Picture.Width) / 2;
                MoveCenterY = Math.Abs(DxfHeight * ZoomFactor - Picture.Height) / 2;
            }
            else
            {
                ZoomFactor = ((Picture.Width) / DxfWidth) * 0.95f;  //计算窗体宽度和图中的图形的宽度的比值,MoveCenterY，0.95f为保险系数

                MoveCenterX = Math.Abs(DxfWidth * ZoomFactor - Picture.Width) / 2;
                MoveCenterY = Math.Abs(DxfHeight * ZoomFactor - Picture.Height) / 2;

            }
        }
    }
}
